package com.lemzdo.community.service.impl;

import com.lemzdo.community.mapper.UserMapper;
import com.lemzdo.community.model.User;
import com.lemzdo.community.model.UserExample;
import com.lemzdo.community.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public int deleteByPrimaryKey(Integer id) {
        return userMapper.deleteByPrimaryKey(id);
    }

    @Override
    public int insert(User record) {
        return userMapper.insert(record);
    }

    @Override
    public int insertSelective(User record) {
        return userMapper.insertSelective(record);
    }

    @Override
    public User selectByPrimaryKey(Integer id) {
        return userMapper.selectByPrimaryKey(id);
    }

    @Override
    public int updateByPrimaryKeySelective(User record) {
        return userMapper.updateByPrimaryKeySelective(record);
    }

    @Override
    public int updateByPrimaryKey(User record) {
        return userMapper.updateByPrimaryKey(record);
    }

    @Override
    public List<User> selectByToken(String token) {

        //使用逆向工程的example完成 where Token=token
        UserExample example = new UserExample();
        example.createCriteria().andTokenEqualTo(token);

        return userMapper.selectByExample(example);
    }

    /**
     *  已登录用户去数据库中对比，有数据（以前登陆过，同一个用户）则更新即可，没有数据则新建
     * @param user 新登录的用户
     */
    @Override
    public void createOrUpdate(User user) {

        UserExample example = new UserExample();
        example.createCriteria().andAccountIdEqualTo(user.getAccountId());
        List<User> users = userMapper.selectByExample(example);
        //User dbUser = users.get(0);
        //去数据库根据新user的accountId查找数据 获取对应的user
        if(users.size()==0||users.get(0)==null){
            //dbUser为空，数据库中没有，执行插入操作
            // controller中没有获取创建时间 数据库中有值就不用修改时间 所以插入的时候设置
            user.setGmtCreate(System.currentTimeMillis());//当前毫秒数
            user.setGmtModified(user.getGmtCreate());//获取时间
            userMapper.insertSelective(user);

        }else {
            //dbUser有值，执行更新方法
            example.createCriteria().andAccountIdEqualTo(user.getAccountId());
            userMapper.updateByExampleSelective(user, example);
           // userMapper.updateByAccountIdSelective(user);
        }
    }


    /**
     * 配合lambada表达式，和逆向工程的example，通过用户的id们，来获取所有的用户们 封装成list
     * @param userIds userId的list集合
     * @return user的list集合
     */
    @Override
    public List<User> selectUsersByUserIds(List<Integer> userIds) {

        UserExample userExample = new UserExample();
        userExample.createCriteria()
                .andIdIn(userIds);

        return userMapper.selectByExample(userExample);
    }
}
